#include <stdio.h>

#include "key.h"
#include "iot_gpio.h"
#include "iot_gpio_ex.h"
#include "iot_adc.h"
#include "iot_errno.h"

uint16_t g_gpio5AdcBuf[20] = {0};

// 按键初始化
uint32_t Key_Init(void)
{
    IoTGpioInit(IOT_IO_NAME_GPIO_5);
    IoSetFunc(IOT_IO_NAME_GPIO_5, IOT_IO_FUNC_GPIO_5_GPIO);
    IoTGpioSetDir(IOT_IO_NAME_GPIO_5, IOT_GPIO_DIR_IN);
    IoSetPull(IOT_IO_NAME_GPIO_5, IOT_IO_PULL_UP);
    return IOT_SUCCESS;
}

// 人体红外感应
uint32_t REL_Init(void)
{
    IoTGpioInit(IOT_IO_NAME_GPIO_8);
    IoSetFunc(IOT_IO_NAME_GPIO_8, IOT_IO_FUNC_GPIO_8_GPIO);
    IoTGpioSetDir(IOT_IO_NAME_GPIO_8, IOT_GPIO_DIR_IN);
    return IOT_SUCCESS;
}

uint32_t REL_GetData(void)
{
    IotGpioValue rel;
    IoTGpioGetInputVal(IOT_IO_NAME_GPIO_8, &rel);
    // printf("%d\n", rel);
    return rel;
}

uint32_t GetGpio5Voltage(void)
{
    uint16_t data;
    uint32_t ret;
    uint32_t vlt;
    float voltage;
    float vltMax = 0;
    float vltMin = 100;

    memset_s(g_gpio5AdcBuf, sizeof(g_gpio5AdcBuf), 0x00, sizeof(g_gpio5AdcBuf));
    for (int i = 0; i < 20; i++)
    {
        ret = AdcRead(IOT_ADC_CHANNEL_2, &data, IOT_ADC_EQU_MODEL_4, IOT_ADC_CUR_BAIS_DEFAULT, 0xF0);
        if (ret != IOT_SUCCESS)
        {
            printf("ADCRead Fail\n");
        }
        g_gpio5AdcBuf[i] = data;
    }

    for (int i = 0; i < 20; i++)
    {
        vlt = g_gpio5AdcBuf[i];
        voltage = (float)vlt * 1.8 * 4 / 4096.0;
        vltMax = (voltage > vltMax) ? voltage : vltMax;
        vltMin = (voltage < vltMin) ? voltage : vltMin;
    }
    if (vltMax > 0.6 && vltMax < 1.0)
    {
        return S1;
    }
    else if (vltMax > 1.0 && vltMax < 1.5)
    {
        return S2;
    }
    else if (vltMax < 0.6)
    {
        return USER;
    }
    // printf("key_5:vltMax=%0.2f, vltMin=%0.2f\r\n", vltMax, vltMin);
    return IOT_SUCCESS;
}
